package app

import (
	"bufio"
	"cli-desktop/public"
	"fmt"
	"os"
	"time"
)

/*
*  -*- coding:utf8 -*-
*
*  命令行形式聊天
*
*  @Author  : chengms
*  @WebSite : chengms.com
*  @Email   : chengms2012@163.com
*  @TIME    : 2020/8/25 22:55
*  @File    : terminal-chat.go
 */

// 测试相关
func LoginTest() {
	_, _ = UserRegister("zhangsan", "123456", "sds@asd.com")

	time.Sleep(1 * time.Second)
	_, _ = UserRegister("lisi", "123456", "sds123@asd.com")

	_, _ = UserLogin("zhangsan", "123456")

}

// 命令行形式启动聊天
func Terminal() {
	var cmd int

	for {
		PrintBaseCmd()
		_, _ = fmt.Scanf("%d", &cmd)
		switch cmd {
		case 1:
			LoginCmd()
		case 2:
			Register()
		case 3:
			ResetPasswd()
		case 4:
			return
		default:
			fmt.Println("Invalid cmd")
			continue
		}
	}
}

func PrintBaseCmd() {
	fmt.Println("================================")
	fmt.Println("1. 登录\t\t\t2. 注册")
	fmt.Println("3. 忘记密码\t\t4. 退出")
	fmt.Print("请输入命令(数字)： ")
}

func LoginCmd() {
	var name, passwd string
	fmt.Print("请输入用户名： ")
	stdin := bufio.NewReader(os.Stdin)
	_, err := fmt.Fscan(stdin, &name)
	_, _ = stdin.ReadString('\n')
	if err != nil {
		panic(err)
	}
	// _, _ = fmt.Scanf("%s", &name)
	fmt.Print("请输入密码： ")
	_, err = fmt.Fscan(stdin, &passwd)
	_, _ = stdin.ReadString('\n')
	if err != nil {
		panic(err)
	}
	// _, _ = fmt.Scanf("%s", &passwd)

	if len(name) == 0 || len(passwd) == 0 {
		public.Loggerf.Info("请输入完整信息")
		return
	}

	res, err := UserLogin(name, passwd)
	if err != nil || res != StsLoginTrue {
		public.Loggerf.Info("登录失败, ", res)
		return
	}

	public.Loggerf.Info("登录成功")

	// 发送聊天
	UserChat()
}

func Register() {
	var name, passwd, email string
	fmt.Print("请输入用户名： ")
	stdin := bufio.NewReader(os.Stdin)
	_, err := fmt.Fscan(stdin, &name)
	_, _ = stdin.ReadString('\n')
	if err != nil {
		panic(err)
	}
	fmt.Print("请输入密码： ")
	_, err = fmt.Fscan(stdin, &passwd)
	_, _ = stdin.ReadString('\n')
	if err != nil {
		panic(err)
	}
	fmt.Print("请输入邮箱： ")
	_, err = fmt.Fscan(stdin, &email)
	_, _ = stdin.ReadString('\n')
	if err != nil {
		panic(err)
	}

	if len(name) == 0 || len(passwd) == 0 || len(email) == 0 {
		public.Loggerf.Info("请输入完整信息")
		return
	}

	res, err := UserRegister(name, passwd, email)
	if err != nil || res != StsRegisterTrue {
		public.Loggerf.Info("注册失败, ", res)
		return
	}

	public.Loggerf.Info("注册成功")
}

func ResetPasswd() {
	fmt.Println("找回密码\n")
}

func PrintUserInfo() {
	fmt.Println("1. 聊天\t\t2. 在线列表\t\t3. 退出")
	fmt.Print("请输入命令(数字)： ")
}

func PrintOnlineFriend() {
	fmt.Println("好用在线列表")
}

func PrintOnlineFriendCount() {
	fmt.Println("当前好友数量： ")
}

// 用户信息
func UserChat() {
	PrintOnlineFriend()

	var cmd int
	stdin := bufio.NewReader(os.Stdin)

	for {
		PrintOnlineFriendCount()
		PrintUserInfo()

		_, err := fmt.Fscan(stdin, &cmd)
		_, _ = stdin.ReadString('\n')
		if err != nil {
			panic(err)
		}
		switch cmd {
		case 1:
			SendChat()
		case 2:
			PrintOnlineFriend()
		case 3:
			return
		}
	}
}

func SendChat() {
	var msg string
	var friend string
	stdin := bufio.NewReader(os.Stdin)

	for {
		fmt.Println("请输入好友名(0 退出)：")
		_, err := fmt.Fscan(stdin, &friend)
		_, _ = stdin.ReadString('\n')
		if err != nil {
			panic(err)
		}
		if friend == "0" {
			return
		}

		for {
			fmt.Println("内容：")
			_, err := fmt.Fscan(stdin, &msg)
			_, _ = stdin.ReadString('\n')
			if err != nil {
				panic(err)
			}
			err = SendChatMSg(friend, msg)
			if err != nil {
				fmt.Println("发送消息失败: ", err)
			}
		}
	}
}
